#include "../stdafx.h"
#include "CharClassify.h"
#include <ctype.h>

namespace soy{
	CharClassify::CharClassify() {
		SetDefaultCharClasses(true);
	}

	void CharClassify::SetDefaultCharClasses(bool includeWordClass) {
		// Initialize all char classes to default values
		for (int ch = 0; ch < 256; ch++) {
			if (ch == '\r' || ch == '\n')
				charClass[ch] = ccNewLine;
			else if (ch < 0x20 || ch == ' ')
				charClass[ch] = ccSpace;
			else if (includeWordClass && (ch >= 0x80 || isalnum(ch) || ch == '_'))
				charClass[ch] = ccWord;
			else
				charClass[ch] = ccPunctuation;
		}
	}

	void CharClassify::SetCharClasses(const unsigned char *chars, cc newCharClass) {
		// Apply the newCharClass to the specifed chars
		if (chars) {
			while (*chars) {
				charClass[*chars] = static_cast<unsigned char>(newCharClass);
				chars++;
			}
		}
	}

};
